<?php

/**
 *                  ********************
 *    ************ USERS ADMIN CONTROLLER ************
 *                  ********************
 * 
 * 
 */
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Users extends Admin_Controller {

    /**
     * 
     * Index Page for admin
     * 
     * 
     */
    public function index() {
        $this->user_list();
    }

    /**
     * 
     * Új felhasználó FORM
     * 
     */
    public function new_user() {
        $this->data['title'] = "Felhasználó hozzáadása";
        $this->_load_view('admin/users/edit_user_view');
    }

    /**
     * 
     * felhasználó hozzáadása funkció
     * 
     */
    public function add_user() {
        $this->form_validation->set_rules('user_login', 'Felhasználónév', 'required|min_length[5]|max_length[12]|is_unique[users.user_login]');
        $this->form_validation->set_rules('display_name', 'Becenév', 'required');
        $this->form_validation->set_rules('user_email', 'E-mail', 'required|valid_email|is_unique[users.user_email]');
        $this->form_validation->set_rules('user_pass', 'Jelszó', 'required|matches[user_pass_1]');
        $this->form_validation->set_rules('user_pass_1', 'Jelszó mégegyszer', 'required|matches[user_pass]');
        // if form validation fails go back new_category and return.
        $this->form_validation->set_error_delimiters('', '');
        if ($this->form_validation->run() == FALSE) {
            $this->new_user();
            return;
        }
        // átjutunk az ellenőrzésen akkor lementjük az adatokat
        $userdata = $this->input->post();
        // kiszedjük az user_pass_1-et mert nem kell
        unset($userdata['user_pass_1']);
        // elmentjük
        $this->user_model->add_user($userdata);
        // legközelebb találkozunk, most lista.
        $this->session->set_flashdata('message', 'Az új felhasználó: ' .
                $userdata["display_name"] . ' sikeresen bekerült a rendszerbe.');
        redirect('admin/users');
    }

    /**
     * 
     * FELHASZNÁLÓ SZERKESZTÉSE FORM
     *
     * @param type $id 
     */
    public function edit_user($id = NULL) {
        $this->data['title'] = "Felhasználó szerkesztése";
        // ha nincs id redirectelünk
        if (!isset($id)) {
            $this->session->set_flashdata('error_message', 'A szerkesztéshez id-t kell megadni.');
            redirect('admin/users');
        }
        $this->data['user_data'] = $this->user_model->get_user($id);
        $this->_load_view('admin/users/edit_user_view', $this->data);
    }
    
    /**
     *
     *  Felhasználó update
     * 
     * @param type $id
     * @return type 
     */
    public function update_user($id = NULL) {
        // ha nincs id redirectelünk
        if (!isset($id)) {
            $this->session->set_flashdata('error_message', 'A szerkesztéshez id-t kell megadni.');
            redirect('admin/users');
        }
        // egyébként ellenőrzünk
        $this->form_validation->set_rules('user_login', 'Felhasználónév', 'required|min_length[5]|max_length[12]');
        $this->form_validation->set_rules('display_name', 'Becenév', 'required');
        $this->form_validation->set_rules('user_email', 'E-mail', 'required|valid_email');
        $this->form_validation->set_rules('user_pass', 'Jelszó', 'matches[user_pass_1]');
        $this->form_validation->set_rules('user_pass_1', 'Jelszó mégegyszer', 'matches[user_pass]');
        // if form validation fails go back new_category and return.
        $this->form_validation->set_error_delimiters('', '');
        if ($this->form_validation->run() == FALSE) {
            $this->edit_user($id);
            return;
        }
        // átjutunk az ellenőrzésen akkor lementjük az adatokat
        $userdata = $this->input->post();
        // user id-t betesszük
        $userdata['user_id'] = $id;
        // kiszedjük az user_pass_1-et mert nem kell
        unset($userdata['user_pass_1']);
        // ha nincs kitöltve a jelszó, akkor nem módosítjuk
        if($userdata['user_pass'] == ""){
            unset( $userdata['user_pass'] );
        }
        // elmentjük
        $this->user_model->update_user($userdata);
        // legközelebb találkozunk, most lista.
        $this->session->set_flashdata('message', 'A felhasználó: ' .
                $userdata["display_name"] . ' adatai sikeresen módosultak.');
        // frissítjük a login auth sessiont
        $this->zen_auth->refresh_session_user_data();
        // redirect
        redirect('admin/users');
    }

    /**
     * 
     * Felhasználók listázása datatables-el
     * 
     */
    public function user_list() {
        $this->data['title'] = "Felhasználók listázása";
        //function get_datatable_jquery($ajax_source_site_url, $table_name, $table_fields = array())
        //$datatable = get_datatable_jquery($ajax_source_site_url, $table_name, $table_fields = array());
        $this->data['dtables']['ajax_source_site_url'] = 'admin/users/ajax_get_users_table';
        $this->data['dtables']['edit_site_url'] = 'admin/users/edit_user';
        $this->data['dtables']['ajax_delete_site_url'] = 'admin/users/ajax_delete_user';
        $this->data['dtables']['table_name'] = 'users_table';
        $this->data['dtables']['table_fields'] = array('user_id', 'user_login', 'display_name', 'user_email');
        $this->_load_view('admin/users/user_list_view', $this->data);
    }

    /**
     * 
     * 
     * Megnézi létezik-e az adatbázisban már ilyen dolog
     * 
     * 
     */
    public function ajax_exist_in_database() {
        $row_name = $this->input->post('row_name');
        $record_name = $this->input->post('record_name');
        $reg_id = $this->input->post('reg_id');
        // ha nincs reg_id akkor false értéket kapunk, és null-t küldünk.
        if ($reg_id == FALSE)
            $reg_id = NULL;
        if ($row_name == "user_login") {
            if ($this->user_model->is_available("user_login", $record_name, $reg_id)) {
                echo 'available';
            } else {
                echo 'reserved';
            }
            return;
        }

        if ($row_name == "user_email") {
            if ($this->user_model->is_available("user_email", $record_name, $reg_id)) {
                echo 'available';
            } else {
                echo 'reserved';
            }
            return;
        }
        echo 'available';
    }

    /**
     *  Felhasználó törlése
     * 
     * @param type $id
     * @return type 
     */
    public function ajax_delete_user($id) {
        try {
            $this->user_model->delete($id);
        } catch (Exception $e) {
            echo encode_json($e->getMessage());
            return;
        }
        echo encode_json("successful");
    }

    /**
     * Datatables-hez felhasználók listázása
     */
    public function ajax_get_users_table() {
        /**
         * Ami bejön és fontos:
         * iDisplayStart
         * iDisplayLength
         * sSearch
         * sEcho    _ XSS protection
         * 
         * 
         * Ami kimegy:
         * 
         * iTotalRecords
         * iTotalDisplayRecords
         * sEcho
         * aaData
         */
        $this->load->model("user_model");

        // elkérjük az összes postolt adatot
        $all_post = $this->input->post();

        //var_dump($all_post);
        // megnézzük mennyi column van a táblázatban
        $number_of_columns = $all_post['iColumns'];

        // megnézzük kell-e keresni valamire
        ($all_post['sSearch'] != '') ? $search_like = $all_post['sSearch'] : $search_like = NULL;

        // csinálunk egy listát a megjelítendő változókról
        // azaz adatbázisból az oszlopokról
        $select_from_database = "";
        for ($i = 0; $i < $number_of_columns; $i++) {
            $select_from_database .= $all_post["mDataProp_$i"];
            //a vesszőt az utolsóig hozzáadja, mivel ez felsorolás
            if ($i < $number_of_columns - 1)
                $select_from_database.=", ";
        }

        // SORBARENDEZÉS IMPLEMENTÁLÁSA
        // megszerezzük mi szerint kell sortolnunk
        $sort_by_id = $all_post["iSortCol_0"];
        // így megkapjuk a nevét
        $order_by = $all_post["mDataProp_$sort_by_id"];
        // és most hozzáadjuk az irányt
        $order_dir = $all_post["sSortDir_0"];
        ;

        //var_dump($all_post);
        //die();
        // összeállítjuk a lekérést, amit a modelnek küldünk.
        $users_request = array(
            // keresés
            'search_like' => $search_like,
            // kiválasztás
            'select' => $select_from_database,
            // limit&offset
            'limit' => $all_post['iDisplayLength'],
            'offset' => $all_post['iDisplayStart'],
            'order_by' => $order_by,
            'order_dir' => $order_dir
                // @todo: rendezés implementálása
        );

        $users = $this->user_model->get_users($users_request);

        foreach ($users as $user) {
            $user->DT_RowId = "user_id_".$user->user_id;
        }

        $data["iTotalRecords"] = $this->user_model->count();
        $data["iTotalDisplayRecords"] = $data["iTotalRecords"];
        $data["sEcho"] = $all_post["sEcho"];
        $data["aaData"] = $users;

        echo encode_json($data);
    }

}

